package angryballsDecorateur.modele.bases;

import java.awt.Color;
import java.util.Observer;
import java.util.Vector;

import mesmaths.geometrie.base.Vecteur;
import angryballsDecorateur.visitor.BilleVisitor;

public abstract class AbstractBilleDecorateur implements BilleDecorable {

	protected BilleDecorable decorable;

	public AbstractBilleDecorateur(BilleDecorable decorable) {
		this.decorable = decorable;
	}

	@Override
	public void gestionAccélération(Vector<BilleDecorable> billes) {
		decorable.gestionAccélération(billes);
		this.decoreAcceleration(billes);
	}

	@Override
	public void collisionContour(double abscisseCoinHautGauche,
			double ordonnéeCoinHautGauche, double largeur, double hauteur) {
		decorable.collisionContour(abscisseCoinHautGauche,
				ordonnéeCoinHautGauche, largeur, hauteur);
		this.decoreCollisionContour(abscisseCoinHautGauche,
				ordonnéeCoinHautGauche, largeur, hauteur);
	}

	protected abstract void decoreAcceleration(Vector<BilleDecorable> billes);

	protected abstract void decoreCollisionContour(
			double abscisseCoinHautGauche, double ordonnéeCoinHautGauche,
			double largeur, double hauteur);

	@Override
	public Vecteur getPosition() {
		return decorable.getPosition();
	}

	@Override
	public boolean gestionCollisionBilleBille(Vector<BilleDecorable> billes) {
		return decorable.gestionCollisionBilleBille(billes);
	}

	@Override
	public double getRayon() {
		return decorable.getRayon();
	}

	@Override
	public Vecteur getVitesse() {
		return decorable.getVitesse();
	}

	@Override
	public Vecteur getAccélération() {
		return decorable.getAccélération();
	}

	@Override
	public int getClef() {
		return decorable.getClef();
	}

	@Override
	public double masse() {
		return decorable.masse();
	}

	@Override
	public void déplacer(double deltaT) {
		decorable.déplacer(deltaT);
	}

	@Override
	public void accept(BilleVisitor visitor) {
		decorable.accept(visitor);
	}

	@Override
	public Color getColor() {
		return decorable.getColor();
	}

	@Override
	public void addObserver(Observer observer) {
		decorable.addObserver(observer);
	}

	@Override
	public void triggerCollisionEvent() {
		decorable.triggerCollisionEvent();
	}
}
